package com.webserver.core;

import com.webserver.http.MyEmptyRequestException;
import com.webserver.http.MyHttpRequest;
import com.webserver.http.MyHttpResponse;

import java.io.IOException;
import java.net.Socket;

/**
 * 作者：JustOne
 * 微信：Andylau2020smile
 * 抖音：JustOne2018
 * 日期：2022/6/12 19:05
 */
public class MyClientHandler implements Runnable{
    private Socket socket;//与当前客户对应的服务端socket，类似于讲师

    public MyClientHandler(Socket socket){
        this.socket = socket;
    }

    ////////因实现了Runnable接口所以要重写run方法
    @Override
    public void run() {
        try{
            //step1:准备工作：把请求创建成对像，把响应创建对成像。
            MyHttpRequest request = new MyHttpRequest(socket);
            MyHttpResponse response = new MyHttpResponse(socket);

            //step2:处理请求
            DispatcherServlet servlet = new DispatcherServlet();
            servlet.service(request, response);

            //step3:发送响应(在这里需要带学生回看http协议中的响应部份)
            response.flush();

            //神总结：以上三个对象，分别是解析请求，处理请求，发送响应

        }catch (MyEmptyRequestException e){
            System.out.println("这是一个空请求");
            //删除 e.printStackTrace();因为不是真异常，只是不用做后面的业务
        }catch (IOException e) {
            System.out.println("有IO异常了");
            e.printStackTrace();
        } finally {
            try {
                //一问一答后断开连接。HTTP协议要求。
                socket.close(); }catch (Exception e){ e.printStackTrace();
            }
        }
    }


}
